package cn.basic.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import cn.util.PageBean;

public interface BasicDao{
	/**
	 * 保存一个对象
	 * @param object
	 * @return   返回该对象的id
	 */
	public Integer saveObj(Object object);
	
	/**
	 * 更新一个对象
	 * @param object
	 * @return     更新的个数
	 */
	public Integer updateObj(Object object);
	
	/**
	 * 根据条件更新
	 * @param              需要sql语句， 以?形式注入条件              
	 * @param condition    key为条件的位置
	 * @return         更新个数
	 */
	public Integer updateObjsByCondition(String sql,Map<Serializable, Serializable> condition);
	
	/**
	 * 删除一个对象
	 * @param object   需要有id
	 * @return     删除个数
	 */
	public Integer deleteObj(Object object);
	
	/**
	 * 删除根据条件
	 * @param sql           需要sql语句 ，以?形式注入条件
	 * @param condition     key为条件的位置
	 * @return              删除个数
	 */
	public Integer deleteObjByCondition(String sql,Map<Serializable, Serializable> condition);
	
	/**
	 * 根据id查对象
	 * @param classes 要查的对象
	 * @param id
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public Object findObjById(Class classes,Serializable id);
	
	/**
	 * 根据条件查对象
	 * @param hql         需自己拼hql   如：from UserBean where userName=:userName and password=:password
	 * @param condition   条件放在map中   key为：userName，password
	 * @return            查出的对象 
	 */
	public Object findObjByCondition(String hql,Map<Serializable, Serializable> condition);
	
	/**
	 * 根据条件查list   所有的查询条件 用"_"  开头     属性   $pageNow,$pageSize  为分页
	 * @param hql         需自己拼hql   如：from UserBean where userName=:_userName and password=:_password
	 * @param condition   条件放在map中   key为：_userName，_password
	 * @return
	 */
	public List<Object> findListByCondition(String hql,Map<Serializable, Serializable> condition);
	
	/** 查list总数  所有的查询条件 用"_"  开头    
	 * @param hql         需自己拼hql   如：from UserBean where userName=:_userName and password=:_password
	 * @param condition   条件放在map中   key为：_userName，_password
	 * @return
	 */
	public Object getListCount(String hql,Map<Serializable, Serializable> condition);
	
	/**
	 * 批量添加
	 * @param collections
	 * @return       个数
	 */
	public Integer batchInsert(Collection<Object> collections);
	
	/**
	 * 取分页数据
	 * @param hql                 hql 语句   如：from UserBean    userbean  为javabean
	 * @param condition           查询条件    要以“_”开头
	 * @param pageNow             当前页
	 * @param pageSize            每页显示多少个
	 * @return
	 */
	public PageBean fetchPage(String hql,Map<Serializable, Serializable> condition,Integer pageNow,Integer pageSize);
}
